function _new(constructor, ...args) {
  // 1.创建一个空对象
  let obj = {};

  // 2.新对象的proto指向构造方法的原型 更推荐下面那个
  obj.__proto__ = constructor.prototype;
  // obj = Object.create(constructor.prototype)

  // 3.调用构造函数并将this从构造函数上转到新对象上  result是构造函数的返回值，没有的话会是undefined
  const result = constructor.apply(obj, args);

  return result instanceof Object ? result : obj;
}

// 测试
function Person(name, age) {
  this.name = name;
  this.age = age;
}

const p1 = _new(Person, 'xiao', 12);
console.log(p1)
